package com.openlogic.logic.service.datasource;

import java.util.List;
import java.util.Map;

import com.openlogic.common.plugins.db.api.dto.BaseDataSourceParamDto;
import com.openlogic.common.plugins.spi.enums.DbType;
import com.openlogic.datasource.api.entity.DataSourceEntity;
import com.openlogic.datasource.api.param.ConnectionParam;
import com.openlogic.datasource.api.query.DataColumnQuery;
import com.openlogic.datasource.api.query.DataSourceQuery;
import com.openlogic.datasource.api.vo.DataTreeVo;

/**
 * @ClassName: DataSourceService
 * @Description: 数据源信息表 Service业务层
 * @author weiyongpeng
 * @date 2024年11月22日 上午9:13:43
 */
public interface DataSourceService {

	/**
	 * 描述：获取所有支持的数据库类型
	 * @Title: getConnectorTypeAll
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月6日 下午8:48:03
	 */
	Map<String, List<String>> getConnectorTypeAll();

	/**
	 * 描述：新增数据源
	 * @Title: createDataSource
	 * @param dataSourceParam
	 * @author weiyongpeng
	 * @date 2024年11月17日 下午1:44:48
	 */
	void createDataSource(BaseDataSourceParamDto dataSourceParam);

	/**
	 * 描述：修改数据源
	 * @Title: updateDataSource
	 * @param id
	 * @param dataSourceParam
	 * @author weiyongpeng
	 * @date 2024年11月17日 下午3:11:34
	 */
	void updateDataSource(String id, BaseDataSourceParamDto dataSourceParam);

	/**
	 * 描述：查询数据源详情信息
	 * @Title: getDataSourceById
	 * @param id
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月17日 下午7:44:20
	 */
	DataSourceEntity getDataSourceById(String id);

	/**
	 * 描述：查询数据源列表
	 * @Title: getDataSourceList
	 * @param dataSourceQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月17日 下午7:45:41
	 */
	List<DataSourceEntity> getDataSourceList(DataSourceQuery dataSourceQuery);

	/**
	 * 描述：删除数据源根据数据源ID
	 * @Title: deleteDataSourceById
	 * @param id
	 * @author weiyongpeng
	 * @date 2024年11月18日 上午8:23:40
	 */
	void deleteDataSourceById(String id);

	/**
	 * 描述：批量删除数据源根据数据源ID
	 * @Title: deleteDataSourceBatch
	 * @param ids
	 * @author weiyongpeng
	 * @date 2024年11月18日 上午8:40:25
	 */
	void deleteDataSourceBatch(List<String> ids);

	/**
	 * 描述：检查数据源连通性
	 * @Title: checkConnection
	 * @param type
	 * @param connectionParam
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月18日 上午9:21:55
	 */
	Boolean checkConnection(DbType type, ConnectionParam connectionParam);

	/**
	 * 描述：同步数据源
	 * @Title: syncMetadata
	 * @param id
	 * @author weiyongpeng
	 * @date 2024年11月18日 上午9:25:10
	 */
	void syncMetadata(String id);

	/**
	 * 描述：刷新元数据缓存
	 * @Title: refreshMetadata
	 * @author weiyongpeng
	 * @date 2024年11月21日 上午8:23:39
	 */
	void refreshMetadata();

	/**
	 * 描述：获取元数据层级树
	 * @Title: getDataMetadataTree
	 * @param level
	 * @param dataColumnQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月22日 上午9:13:02
	 */
	Map<String, List<DataTreeVo>> getDataMetadataTree(String level, DataColumnQuery dataColumnQuery);

	/**
	 * 描述：sql控制台左侧查询树
	 * @Title: getSqlConsoleDataTree
	 * @param level
	 * @param dataColumnQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月25日 上午8:46:09
	 */
	List<DataTreeVo> getSqlConsoleDataTree(DataColumnQuery dataColumnQuery);

	/**
	 * 描述：获取数据源树结构
	 * @Title: getDataSourceTree
	 * @param dataColumnQuery
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月25日 上午9:40:09
	 */
	List<DataTreeVo> getDataSourceTree(DataColumnQuery dataColumnQuery);

	/**
	 * 描述：修改数据源状态
	 * @Title: updateDataSourceStatus
	 * @param id
	 * @param status
	 * @author weiyongpeng
	 * @date 2024年11月26日 下午5:34:09
	 */
	void updateDataSourceStatus(String id, String status);
}
